import {   type I18n, createI18n } from 'vue-i18n';

import zh_CN from 'ant-design-vue/es/locale/zh_CN.js';
import en_US from 'ant-design-vue/es/locale/en_US.js';
import enUS from './locales/en_US';
import zhCN from './locales/zh-CN';
// import 'dayjs/locale/zh-cn';

const LOCALE_KEY="QN_LOCALE";
const I18N_MESSAGES={
  "en-US":{
    ...en_US,
    ...enUS
  },
  "zh-CN":{
    ...zh_CN,
    ...zhCN
  }
};

function saveLocaleToLocalStorage(val: string) {
  localStorage.setItem(LOCALE_KEY, val);
}

/* 从浏览器偏好设置读取的语言可能是 en, en-US, zh, zh-CN, zh-HK 等格式、最终返回的是"zh-CN"形式（这与message的设置有关） */
function getSimilarLocale(val: unknown) {
  if (typeof val !== 'string') {
    return;
  }

  // 校验语言格式
  const localeSplitArr = val.split('-');
  const lang = localeSplitArr[0];
  const country = localeSplitArr[localeSplitArr.length - 1];
  // lang 格式 e.g. en, zh
  if (!country) {
    // 根据 lang 找近似语言
    for (const key in I18N_MESSAGES) {
      const [itemLang] = key.split('-');
      if (itemLang.toLowerCase() === lang.toLowerCase()) {
        return key as string; // 推断不了字面量, 只能断言
      }
    }
    return;
  }

  // lang-country 格式, e.g. en-US, zh-CN
  for (const key in I18N_MESSAGES) {
    if (key.toLowerCase() === val.toLowerCase()) {
      return key as string; // 推断不了字面量, 只能断言
    }
  }
}

/* 获取默认语言：优先从缓存读，其次从浏览器偏好设置读 */
function getDefaultLocale() {
  // 从缓存读
  const cacheLocale = getSimilarLocale(localStorage.getItem(LOCALE_KEY));
  if (cacheLocale) {
    return cacheLocale;
  }

  let result: string = 'en-US';
  // 从浏览器偏好设置读
  const browserLocale = getSimilarLocale(navigator.language);
  if (browserLocale) {
    result = browserLocale;
  }
  // 保存到缓存
  saveLocaleToLocalStorage(result);

  return result;
}
const defaultLocale = getDefaultLocale();
const i18n = createI18n<any>({
  locale: defaultLocale, // 默认使用的语言
  fallbackLocale: defaultLocale, // 未找到对应语言时使用的语言
  legacy: true, // 启用传统模式，这意味着插件将使用旧版的 Vue 2 API。
  globalInjection: false, // 是否将 $i18n 注入到全局 Vue 实例中
  fallbackRoot: true, // 如果未找到翻译，是否回退到根语言
  messages: I18N_MESSAGES, // 语言包
}); 
const getLocale=()=>{
    const locale=i18n.global.locale;
    return I18N_MESSAGES[locale];
  
};

export const { t } = i18n.global;

export {getLocale};

/* 切换语言 */
// export function toggle(val: string) {
//   if (val === i18n.global.locale) {
//     return;
//   }
//   saveLocaleToLocalStorage(val);
//   i18n.global.locale = val;
//   location.reload();
// }

// export const languages: Record<string, string> = {
//   'en-US': 'English',
//   'zh-CN': '简体中文',
// };

export default i18n;